#pragma once


namespace ObserverLib {

	class  ObservMangerBase;

	class ObserverLib_EXPORT ObserverBase
{
protected:
	ObserverBase(SubjectObserverType type = EObserver_Default);
public:
	virtual ~ObserverBase(void);

public:

  virtual HRESULT OnUpdate(void* pSender, LPARAM lHint, WPARAM wHint) = 0;


protected:
	virtual void Add(ObservMangerBase* pSubject, SubjectObserverType type = EObserver_Default);
	virtual void Del(ObservMangerBase* pSubject);
private:
	friend class ObservMangerBase;
  SubjectObserverType m_eObserverType; 


private:
	ObserverBase* m_pThis;
};

}

using namespace ObserverLib;

